import { defineStore } from 'pinia';
import { ElMessage } from 'element-plus';
import { getToken, removeToken, setToken, isHaveToken, getCurrentUser, removeCurrentUser } from '@/utils/auth';
import { getPersonalUser } from '@/api/user'

export const useUserStore = defineStore('app', {
    state: () => ({
        // 是否加载中
        isLoading: false,
        // 是否登录
        isLogin: isHaveToken(),
        // 是否外部触发打开登录框
        openLogin: false,
        // 当前用户
        user: getCurrentUser(),
    }),

    actions: {
        // 在这里定义你的状态修改方法
        // 退出登录或登录过期时初始化个别数据
        initData() {
            this.isLogin = false;
            this.user = {};
            // ElMessage.success("退出成功");
        },
        // 更新登录状态
        updateIsLogin(isLogin) {
            this.isLogin = isLogin;
        },
        // 更新当前用户
        updateUser(user) {
            this.user = user;
            // console.log("更新vuex中用户信息: ", state.user);
        },
        // 退出登录
        logout() {
            // 先修改状态再发送请求，防止token过期导致退出失败
            this.isLogin = false;
            this.user = {};
            removeCurrentUser();
            // 清除本地token缓存
            removeToken();
            router.push("/login");
        },
        // 获取当前用户信息
        async getPersonalInfo() {
            await getPersonalUser().then(res => {
                if (res.code == 1) {
                    this.user = res.data;
                    this.isLogin = true;
                } else {
                    removeToken();
                    this.isLogin = false;
                    // 清空user信息
                    this.user = {};
                    ElMessage.error("登录状态过期");
                    router.push("/login");
                }
            })
        },
    },
});
